欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang中下劃線(_)的不錯用法分享

 更新時間:2023年05月16日 16:27:10   作者:raoxiaoya  
golang中的下劃線表示忽略變量的意思,也沒有產(chǎn)生新的變量,但是后面的表達式依然會被執(zhí)行,本文為大家整理了golang中下劃線的一些不錯的用法,需要的可以參考下

1、忽略返回值

這個應(yīng)該是最簡單的用途,比如某個函數(shù)返回三個參數(shù),但是我們只需要其中的兩個,另外一個參數(shù)可以忽略,這樣的話代碼可以這樣寫:

v1, v2, _ := function(...)
v1, _, _ := function(...)

如果沒有產(chǎn)生新變量

_, _, _ = function(...)
_ = json.Unmarshal(...)

2、用在變量(特別是接口斷言)

例如我們定義了一個接口(interface):

type Foo interface {
     Say()
}

然后定義了一個結(jié)構(gòu)體(struct)

type Dog struct {

???????}

然后我們希望在代碼中判斷Dog這個struct是否實現(xiàn)了Foo這個interface

var _ Foo = Dog{}

上面用來判斷Dog是否實現(xiàn)了Foo, 用作類型斷言,如果Dog沒有實現(xiàn)Foo,則會報編譯錯誤

3、用在import package

假設(shè)我們在代碼的import中這樣引入package:

import _ "test/foo"

這表示在執(zhí)行本段代碼之前會先調(diào)用test/foo中的初始化函數(shù)(init),這種使用方式僅讓導(dǎo)入的包做初始化,而不使用包中其他功能

例如我們定義了一個Foo struct,然后對它進行初始化

package foo
import "fmt"
type Foo struct {
        Id   int
        Name string
}
func init() {
        f := &Foo{Id: 123, Name: "abc"}
        fmt.Printf("init foo object: %v\n", f)
}

然后在main函數(shù)里面引入test/foo

package main
import (
        "fmt"
        _ "test/foo"
)
func main() {
        fmt.Printf("hello world\n")
}

運行結(jié)果如下

init foo object: &{123 abc}
hello world

我們可以看到:在main函數(shù)輸出”hello world”之前就已經(jīng)對foo對象進行初始化了!

4、版本校驗,編譯時斷言

在使用gRPC的時候,看到通過 const 來做版本校驗,因為他牽涉到多個項目多個包,生成的 pb.go 文件需要指定具體版本信息

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4

常量 proto.ProtoPackageIsVersion4 在業(yè)務(wù)代碼中不會被調(diào)用到,因此無法通過明確調(diào)用的方式來迫使編譯器報錯,因此可以再定義個常量來引用它

const _ = proto.ProtoPackageIsVersion4

或者

const vs4 = proto.ProtoPackageIsVersion4

比如,有些版本并未發(fā)生大的改動,無論是編譯還是運行都不會有影響,但是運行結(jié)果不同,因此需要顯示的做版本限制。

到此這篇關(guān)于Golang中下劃線(_)的不錯用法分享的文章就介紹到這了,更多相關(guān)Golang下劃線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Goland激活碼破解永久版及安裝詳細教程(親測可以)

    Goland激活碼破解永久版及安裝詳細教程(親測可以)

    這篇文章主要介紹了Goland激活碼破解永久版及安裝詳細教程(親測可以),本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Go語言實現(xiàn)動態(tài)開點線段樹詳解

    Go語言實現(xiàn)動態(tài)開點線段樹詳解

    線段樹是一種用于高效處理區(qū)間查詢和區(qū)間更新的數(shù)據(jù)結(jié)構(gòu),下面我們就來看看如何使用Go實現(xiàn)動態(tài)開點線段樹的方式,感興趣的可以了解下
    2025-02-02
  • golang中defer執(zhí)行時機的案例分析

    golang中defer執(zhí)行時機的案例分析

    這篇文章主要來通過一些案例和大家一起探討一下golang中defer的執(zhí)行時機,文中的示例代碼講解詳細,對我們深入了解golang有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • golang操作Redis的實現(xiàn)示例

    golang操作Redis的實現(xiàn)示例

    本文主要介紹了golang操作Redis的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Go語言快速入門指針Map使用示例教程

    Go語言快速入門指針Map使用示例教程

    這篇文章主要為大家介紹了Go語言快速入門指針Map示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 淺談beego默認處理靜態(tài)文件性能低下的問題

    淺談beego默認處理靜態(tài)文件性能低下的問題

    下面小編就為大家?guī)硪黄獪\談beego默認處理靜態(tài)文件性能低下的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Go語言庫系列之flag的具體使用

    Go語言庫系列之flag的具體使用

    這篇文章主要介紹了Go語言庫系列之flag的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Windows下使用go語言寫程序安裝配置實例

    Windows下使用go語言寫程序安裝配置實例

    這篇文章主要介紹了Windows下使用go語言寫程序安裝配置實例,本文講解了安裝go語言、寫go代碼、生成可執(zhí)行文件、批量生成可執(zhí)行文件等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Go語言中的函數(shù)詳解

    Go語言中的函數(shù)詳解

    函數(shù)是基本的代碼塊,用于執(zhí)行一個任務(wù)。本文詳細講解了Go語言中的函數(shù),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • intelliJ?idea安裝go開發(fā)環(huán)境并搭建go項目(打包)全過程

    intelliJ?idea安裝go開發(fā)環(huán)境并搭建go項目(打包)全過程

    最近在配置idea開發(fā)go語言時碰到很多問題,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于intelliJ?idea安裝go開發(fā)環(huán)境并搭建go項目(打包)的相關(guān)資料,需要的朋友可以參考下
    2023-10-10

最新評論