亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Home Backend Development Golang COMMON GOLANG INTERVIEW QUESTIONS

COMMON GOLANG INTERVIEW QUESTIONS

Oct 18, 2024 pm 02:09 PM

COMMON GOLANG INTERVIEW QUESTIONS

Golang 面接でよくある 100 の質(zhì)問と回答

1. Golang とは何ですか?

Go、または Golang は、Google によって開発されたオープンソース プログラミング言語です。これは、スケーラブルで高性能なアプリケーションを構(gòu)築するために靜的に型付け、コンパイル、設(shè)計されています。

2. Go の主な機能は何ですか?

  • ゴルーチンを使用した同時実行のサポート。
  • ガベージコレクション。
  • 動的動作を伴う靜的型付け。
  • 単純な構(gòu)文。
  • 高速コンパイル。

3. ゴルーチンとは何ですか?

Goroutine は、Go ランタイムによって管理される軽量のスレッドです。これらは、他の関數(shù)またはメソッドと同時に実行される関數(shù)またはメソッドです。

4. Goroutine はどのように作成しますか?

関數(shù)呼び出しの前に go キーワードを使用します。

   go myFunction()

5. Go のチャネルとは何ですか?

チャネルは、ゴルーチンが相互に通信し、実行を同期するための方法です。値の送受信が可能です。

6. チャンネルはどのように宣言しますか?

   ch := make(chan int)

7. バッファリングされたチャネルとは何ですか?

バッファされたチャネルには指定された容量があり、バッファがいっぱいになるまで値を送信できます。受信機が受信できる狀態(tài)になっている必要はありません。

8. チャンネルを閉じるにはどうすればよいですか?

close() 関數(shù)を使用します:

   close(ch)

9. Go の構(gòu)造體とは何ですか?

構(gòu)造體は、さまざまなデータ型のフィールドを 1 つのエンティティにグループ化できるユーザー定義型です。

10. 構(gòu)造體はどのように定義しますか?

   type Person struct {
    Name string
    Age  int
   }

11. Go のインターフェースとは何ですか?

Go のインターフェイスは、メソッド シグネチャのセットを指定する型です。動作を定義することでポリモーフィズムが可能になります。

12. インターフェースはどのように実裝しますか?

型は、そのすべてのメソッドを?qū)g裝することによってインターフェイスを?qū)g裝します。

    type Animal interface {
       Speak() string
    }

    type Dog struct{}

    func (d Dog) Speak() string {
        return "Woof!"
    }

13. defer キーワードとは何ですか?

defer は、周囲の関數(shù)が戻るまで関數(shù)の実行を延期するために使用されます。

14. 延期はどのように機能しますか?

遅延関數(shù)は LIFO (後入れ先出し) 順序で実行されます:

   defer fmt.Println("world")
   fmt.Println("hello")
   // Output: hello world

15. Go のポインタとは何ですか?

ポインタは値のメモリアドレスを保持します。値をコピーする代わりに參照を渡すために使用されます。

16. ポインタはどのように宣言しますか?

   var p *int
   p = &x

17. 新品とメーカーの違いは何ですか?

  • new はメモリを割り當(dāng)てますが、値は初期化しません。
  • make は、スライス、マップ、チャネルにメモリを割り當(dāng)てて初期化します。

18. Go のスライスとは何ですか?

スライスは、要素のシーケンスをより柔軟に操作する方法を提供する、動的にサイズが変更される配列です。

19. スライスはどのように作成しますか?

   s := make([]int, 0)

20. Go のマップとは何ですか?

マップはキーと値のペアのコレクションです。

21. 地図はどのように作成しますか?

   m := make(map[string]int)

22. select ステートメントとは何ですか?

select を選択すると、Goroutine が複數(shù)の通信操作を待機できるようになります。

23. 選択はどのように使用しますか?

   select {
    case msg := <-ch:
        fmt.Println(msg)
    default:
        fmt.Println("No message received")
    }

24. nil チャネルとは何ですか?

nil チャネルは送信操作と受信操作の両方をブロックします。

25. init関數(shù)とは何ですか?

init は、パッケージレベルの変數(shù)を初期化する特別な関數(shù)です。 main の前に実行されます。

26. 複數(shù)の init 関數(shù)を使用できますか?

はい、ただし、表示される順序で実行されます。

27. 空の構(gòu)造體 {} とは何ですか?

空の構(gòu)造體はストレージをゼロバイト消費します。

28. Go でエラー処理を行うにはどうすればよいですか?

エラー タイプを返し、以下を使用してチェックします。

   if err != nil {
    return err
   }

29. 型アサーションとは何ですか?

型アサーションは、インターフェイスの基礎(chǔ)となる値を抽出するために使用されます:

   value, ok := x.(string)

30. go fmt コマンドとは何ですか?

go fmt 標(biāo)準(zhǔn)スタイルに従って Go ソース コードをフォーマットします。

31. go modの目的は何ですか?

go mod は Go プロジェクトのモジュールの依存関係を管理します。

32. モジュールはどのように作成しますか?

  go mod init module-name

33. Go のパッケージとは何ですか?

パッケージは、関連する Go ファイルをグループ化する方法です。

34. How do you import a package?

  import "fmt"

35. What are the visibility rules in Go?

  • Exported identifiers start with an uppercase letter.
  • Unexported identifiers start with a lowercase letter.

36. What is the difference between var and :=?

  • var is used for variable declaration with explicit types.
  • := is used for short variable declaration with inferred types.

37. What is a panic in Go?

panic is used to terminate the program immediately when an error occurs.

38. What is recover?

recover is used to regain control after a panic.

39. How do you use recover?

It is used inside a deferred function:

  defer func() {
    if r := recover(); r != nil {
        fmt.Println("Recovered:", r)
    }
   }()

40. What is a constant in Go?

Constants are immutable values declared using the const keyword.

41. How do you declare a constant?

  const Pi = 3.14

42. What are iota in Go?

iota is a constant generator that increments by 1 automatically.

43. What is go test?

go test is used to run unit tests written in Go.

44. How do you write a test function?

Test functions must start with Test:

  func TestAdd(t *testing.T) {
    result := Add(2, 3)
    if result != 5 {
        t.Errorf("expected 5, got %d", result)
    }
  }

45. What is benchmarking in Go?

Benchmarking is used to measure the performance of a function using go test.

46. How do you write a benchmark function?

Benchmark functions must start with Benchmark:

    func BenchmarkAdd(b *testing.B) {
        for i := 0; i < b.N; i++ {
            Add(2, 3)
        }
    }

47. What is a build constraint?

Build constraints are used to include or exclude files from the build process based on conditions.

48. How do you set a build constraint?

Place the constraint in a comment at the top of the file:

    // +build linux

49. What are slices backed by arrays?

Slices are built on top of arrays and provide a dynamic view over the array.

50. What is garbage collection in Go?

Go automatically manages memory using garbage collection, which frees up memory that is no longer in use.

51. What is the context package in Go?

The context package is used for managing deadlines, cancellation signals, and request-scoped values. It helps in controlling the flow of Goroutines and resources.

52. How do you use context in Go?

   ctx, cancel := context.WithTimeout(context.Background(), time.Second)
   defer cancel()

53. What is sync.WaitGroup?

sync.WaitGroup is used to wait for a collection of Goroutines to finish executing.

54. How do you use sync.WaitGroup?

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        // Do some work
    }()
    wg.Wait()

55. What is sync.Mutex?

sync.Mutex provides a lock mechanism to protect shared resources from concurrent access.

56. How do you use sync.Mutex?

   var mu sync.Mutex
    mu.Lock()
    // critical section
    mu.Unlock()

57. What is select used for with channels?

select is used to handle multiple channel operations simultaneously, allowing a Goroutine to wait for multiple communication operations.

58. What is go generate?

go generate is a command for generating code. It reads special comments within the source code to execute commands.

59. What are method receivers in Go?

Method receivers specify the type the method is associated with, either by value or pointer:

    func (p *Person) GetName() string {
        return p.Name
    }

60. What is the difference between value and pointer receivers?

  • Value receivers get a copy of the original value.
  • Pointer receivers get a reference to the original value, allowing modifications.

61. What are variadic functions?

Variadic functions accept a variable number of arguments:

    func sum(nums ...int) int {
        total := 0
        for _, num := range nums {
            total += num
        }
        return total
   }

62. What is a rune in Go?

A rune is an alias for int32 and represents a Unicode code point.

63. What is a select block without a default case?

A select block without a default will block until one of its cases can proceed.

64. What is a ticker in Go?

A ticker sends events at regular intervals:

    ticker := time.NewTicker(time.Second)

65. How do you handle JSON in Go?

Use the encoding/json package to marshal and unmarshal JSON:

    jsonData, _ := json.Marshal(structure)
    json.Unmarshal(jsonData, &structure)

66. What is go vet?

go vet examines Go source code and reports potential errors, focusing on issues that are not caught by the compiler.

67. What is an anonymous function in Go?

An anonymous function is a function without a name and can be defined inline:

    func() {
        fmt.Println("Hello")
    }()

68. What is the difference between == and reflect.DeepEqual()?

  • == checks equality for primitive types.
  • reflect.DeepEqual() compares deep equality of complex types like slices, maps, and structs.

69. What is a time.Duration in Go?

time.Duration represents the elapsed time between two points and is a type of int64.

70. How do you handle timeouts with context?

Use context.WithTimeout to set a timeout:

    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    defer cancel()

71. What is a pipeline in Go?

A pipeline is a series of stages connected by channels, where each stage is a collection of Goroutines that receive values from upstream and send values downstream.

72. What is pkg directory convention in Go?

pkg is a directory used to place reusable packages. It is a common convention but not enforced by Go.

73. How do you debug Go code?

Use tools like dlv (Delve), print statements, or the log package.

74. What is type alias in Go?

type aliasing allows you to create a new name for an existing type:

  type MyInt = int

75. What is the difference between Append and Copy in slices?

  • append adds elements to a slice and returns a new slice.
  • copy copies elements from one slice to another.
slice1 := []int{1, 2}
slice2 := []int{3, 4}
copy(slice2, slice1) // [1, 2]

76. What is the purpose of go doc?

go doc is used to display documentation for a Go package, function, or variable.

77. How do you handle panics in production code?

Use recover to gracefully handle panics and log them for debugging:

defer func() {
    if r := recover(); r != nil {
        log.Println("Recovered from:", r)
    }
}()

78. What is the difference between map and struct?

  • map is a dynamic data structure with key-value pairs.
  • struct is a static data structure with fixed fields.

79. What is unsafe package?

The unsafe package allows low-level memory manipulation. It is not recommended for regular use.

80. How do you achieve dependency injection in Go?

Use interfaces and constructor functions to pass dependencies, allowing easy mocking and testing.

type HttpClient interface{}

func NewService(client HttpClient) *Service {
    return &Service{client: client}
}

81. How does Goroutine differ from a thread?

A Goroutine is a lightweight thread managed by the Go runtime. It differs from OS threads as it uses a smaller initial stack (2KB) and is multiplexed onto multiple OS threads. This makes Goroutines more efficient for handling concurrency.

82. How does the Go scheduler work?

The Go scheduler uses a work-stealing algorithm with M:N scheduling, where M represents OS threads and N represents Goroutines. It schedules Goroutines across available OS threads and CPUs, aiming to balance workload for optimal performance.

83. What is a memory leak, and how do you prevent it in Go?

A memory leak occurs when allocated memory is not released. In Go, it can happen if Goroutines are not terminated or references to objects are kept unnecessarily. Use defer for cleanup and proper cancellation of Goroutines to prevent leaks.

84. How does garbage collection work in Go?

Go uses a concurrent, mark-and-sweep garbage collector. It identifies reachable objects during the mark phase and collects the unreachable ones during the sweep phase, allowing other Goroutines to continue running during collection.

85. Explain differences between sync.Mutex and sync.RWMutex.

  • sync.Mutex is used to provide exclusive access to a shared resource.
  • sync.RWMutex allows multiple readers or one writer at a time, providing better performance for read-heavy workloads.

86. What are race conditions, and how do you detect them in Go?

Race conditions occur when multiple Goroutines access a shared variable concurrently without proper synchronization. Use go run -race to detect race conditions in Go programs.

87. What is a struct tag, and how is it used?

Struct tags provide metadata for struct fields, often used for JSON serialization:

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

88. How do you create a custom error in Go?

Create a custom error by implementing the error interface:

type MyError struct {
    Msg string
}
func (e *MyError) Error() string {
    return e.Msg
}

89. What is a nil pointer dereference, and how do you avoid it?

A nil pointer dereference occurs when you attempt to access the value a nil pointer points to. Avoid this by checking for nil before using pointers.

90. Explain the difference between sync.Pool and garbage collection.

sync.Pool is used for reusing objects and reducing GC pressure. It provides a way to cache reusable objects, unlike the GC which automatically frees unused memory.

91. How do you implement a worker pool in Go?

Use channels to distribute tasks and manage worker Goroutines:

jobs := make(chan int, 100)
for w := 1; w <= 3; w++ {
    go worker(w, jobs)
}

92. What is reflect in Go?

The reflect package allows runtime inspection of types and values. It is used for dynamic operations like inspecting struct fields or methods.

93. What is the difference between buffered and unbuffered channels?

  • A buffered channel has a capacity, allowing Goroutines to send data without blocking until the buffer is full.
  • An unbuffered channel has no capacity and blocks until the receiver is ready.

94. How do you avoid Goroutine leaks?

Ensure Goroutines are terminated using context for cancellation or using timeouts with channels.

95. What are the key differences between panic and error?

  • error is used for handling expected conditions and can be returned.
  • panic is used for unexpected conditions and stops the normal flow of execution.

96. Explain the io.Reader and io.Writer interfaces.

io.Reader has a Read method for reading data, while io.Writer has a Write method for writing data. They form the basis of Go's I/O abstractions.

97. What is a nil value interface, and why is it problematic?

A nil value interface is an interface with a nil underlying value. It can cause unexpected behavior when check nil, as an interface with a nil underlying value is not equal to nil.

type MyInterface interface{}
var i MyInterface
var m map[string]int
i = m // This case, m is nil but i not nil

To handle above case, we could use interface assertion as following

    if v, ok := i.(map[string]int); ok && v != nil {
        fmt.Printf("value not nil: %v\n", v)
    }

98. How do you prevent deadlocks in concurrent Go programs?

To prevent deadlocks, ensure that:

  • Locks are always acquired in the same order across all Goroutines.
  • Use defer to release locks.
  • Avoid holding a lock while calling another function that might acquire the same lock.
  • Limit the use of channels within locked sections.

99. How do you optimize the performance of JSON encoding/decoding in Go?

  • Use jsoniter or easyjson libraries for faster encoding/decoding than the standard encoding/json.
  • Predefine struct fields using json:"field_name" tags to avoid reflection costs.
  • Use sync.Pool to reuse json.Encoder or json.Decoder instances when encoding/decoding large JSON data repeatedly.

100. What is the difference between GOMAXPROCS and runtime.Gosched()?

  • GOMAXPROCS controls the maximum number of OS threads that can execute Goroutines concurrently. It allows adjusting the parallelism level.
  • runtime.Gosched() yields the processor, allowing other Goroutines to run. It does not suspend the current Goroutine but instead gives a chance for the Go scheduler to run other Goroutines.

The above is the detailed content of COMMON GOLANG INTERVIEW QUESTIONS. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

PHP Tutorial
1488
72
Is golang frontend or backend Is golang frontend or backend Jul 08, 2025 am 01:44 AM

Golang is mainly used for back-end development, but it can also play an indirect role in the front-end field. Its design goals focus on high-performance, concurrent processing and system-level programming, and are suitable for building back-end applications such as API servers, microservices, distributed systems, database operations and CLI tools. Although Golang is not the mainstream language for web front-end, it can be compiled into JavaScript through GopherJS, run on WebAssembly through TinyGo, or generate HTML pages with a template engine to participate in front-end development. However, modern front-end development still needs to rely on JavaScript/TypeScript and its ecosystem. Therefore, Golang is more suitable for the technology stack selection with high-performance backend as the core.

How to build a GraphQL API in golang How to build a GraphQL API in golang Jul 08, 2025 am 01:03 AM

To build a GraphQLAPI in Go, it is recommended to use the gqlgen library to improve development efficiency. 1. First select the appropriate library, such as gqlgen, which supports automatic code generation based on schema; 2. Then define GraphQLschema, describe the API structure and query portal, such as defining Post types and query methods; 3. Then initialize the project and generate basic code to implement business logic in resolver; 4. Finally, connect GraphQLhandler to HTTPserver and test the API through the built-in Playground. Notes include field naming specifications, error handling, performance optimization and security settings to ensure project maintenance

How to install Go How to install Go Jul 09, 2025 am 02:37 AM

The key to installing Go is to select the correct version, configure environment variables, and verify the installation. 1. Go to the official website to download the installation package of the corresponding system. Windows uses .msi files, macOS uses .pkg files, Linux uses .tar.gz files and unzip them to /usr/local directory; 2. Configure environment variables, edit ~/.bashrc or ~/.zshrc in Linux/macOS to add PATH and GOPATH, and Windows set PATH to Go in the system properties; 3. Use the government command to verify the installation, and run the test program hello.go to confirm that the compilation and execution are normal. PATH settings and loops throughout the process

Go sync.WaitGroup example Go sync.WaitGroup example Jul 09, 2025 am 01:48 AM

sync.WaitGroup is used to wait for a group of goroutines to complete the task. Its core is to work together through three methods: Add, Done, and Wait. 1.Add(n) Set the number of goroutines to wait; 2.Done() is called at the end of each goroutine, and the count is reduced by one; 3.Wait() blocks the main coroutine until all tasks are completed. When using it, please note: Add should be called outside the goroutine, avoid duplicate Wait, and be sure to ensure that Don is called. It is recommended to use it with defer. It is common in concurrent crawling of web pages, batch data processing and other scenarios, and can effectively control the concurrency process.

Go embed package tutorial Go embed package tutorial Jul 09, 2025 am 02:46 AM

Using Go's embed package can easily embed static resources into binary, suitable for web services to package HTML, CSS, pictures and other files. 1. Declare the embedded resource to add //go:embed comment before the variable, such as embedding a single file hello.txt; 2. It can be embedded in the entire directory such as static/*, and realize multi-file packaging through embed.FS; 3. It is recommended to switch the disk loading mode through buildtag or environment variables to improve efficiency; 4. Pay attention to path accuracy, file size limitations and read-only characteristics of embedded resources. Rational use of embed can simplify deployment and optimize project structure.

Go for Audio/Video Processing Go for Audio/Video Processing Jul 20, 2025 am 04:14 AM

The core of audio and video processing lies in understanding the basic process and optimization methods. 1. The basic process includes acquisition, encoding, transmission, decoding and playback, and each link has technical difficulties; 2. Common problems such as audio and video aberration, lag delay, sound noise, blurred picture, etc. can be solved through synchronous adjustment, coding optimization, noise reduction module, parameter adjustment, etc.; 3. It is recommended to use FFmpeg, OpenCV, WebRTC, GStreamer and other tools to achieve functions; 4. In terms of performance management, we should pay attention to hardware acceleration, reasonable setting of resolution frame rates, control concurrency and memory leakage problems. Mastering these key points will help improve development efficiency and user experience.

How to build a web server in Go How to build a web server in Go Jul 15, 2025 am 03:05 AM

It is not difficult to build a web server written in Go. The core lies in using the net/http package to implement basic services. 1. Use net/http to start the simplest server: register processing functions and listen to ports through a few lines of code; 2. Routing management: Use ServeMux to organize multiple interface paths for easy structured management; 3. Common practices: group routing by functional modules, and use third-party libraries to support complex matching; 4. Static file service: provide HTML, CSS and JS files through http.FileServer; 5. Performance and security: enable HTTPS, limit the size of the request body, and set timeout to improve security and performance. After mastering these key points, it will be easier to expand functionality.

Go select with default case Go select with default case Jul 14, 2025 am 02:54 AM

The purpose of select plus default is to allow select to perform default behavior when no other branches are ready to avoid program blocking. 1. When receiving data from the channel without blocking, if the channel is empty, it will directly enter the default branch; 2. In combination with time. After or ticker, try to send data regularly. If the channel is full, it will not block and skip; 3. Prevent deadlocks, avoid program stuck when uncertain whether the channel is closed; when using it, please note that the default branch will be executed immediately and cannot be abused, and default and case are mutually exclusive and will not be executed at the same time.

See all articles