国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go1.26 新特性:new(expr) 終于來了,創建指針簡單了!

人工智能
new(expr)?? 這個特性解決了 Go 中創建基本類型指針時的不便,讓代碼更簡潔一致。雖然改動不大,但確實提升了開發體驗。這個特性將會在 Go1.26 版本正式發布,由 Alan Donovan、Ian Lance Taylor、Rob Pike 等核心團隊成員推動完成。

今天給大家分享一個 Go1.26 即將帶來的實用新特性—— new(expr) 表達式支持。

圖片圖片

相信寫過 Go 的同學都有過這樣的經歷:創建一個結構體指針很簡單,但要創建一個基本類型的指針就得多寫好幾行代碼。還是挺煩人的。

這個特性能解決日常開發中的小痛點。

背景

在 Go 中,如果我們想創建一個指向結構體的指針,可以這樣寫:

type Person struct { name string }
p := &Person{name: "alice"}

非常簡潔優雅。但如果我們想創建一個指向基本類型值的指針呢?

就得這么寫:

n := 42
p := &n

或者用 new 函數:

p := new(int)
*p = 42

看起來就很不協調對吧?為什么創建復合類型的指針可以一步到位,而基本類型就得多寫一個臨時變量或者兩行代碼?

這個問題其實在社區里討論了很久。早在 2014 年的 issue #9097[1] 就有人提出過,但當時被駁回了。

圖片

為什么不能直接寫 &3?

可能有同學會問:為什么不直接支持 p := &3 這種寫法呢?

問題就出在類型系統上。在 Go 中,數字字面量 3 是一個無類型常量(untyped constant),它本身沒有確定的類型。只有在賦值或者運算時,編譯器才會根據上下文推斷出具體類型。

如果允許 &3 這種寫法,編譯器就不知道該分配什么類型的內存空間 —— 是 intint64 還是 float64

這會帶來類型歧義,所以這條路走不通。

新提案:擴展 new 函數

Go 團隊最終采納的方案是:讓 new 函數不僅可以接受類型參數,還可以接受表達式參數。

快速例子:

p1 := new(int, 3)
p2 := new(rune, 10)
p3 := new(Weekday, Tuesday)
p4 := new(Name, "unspecified")
... and so on

語法規則

新的 new 函數行為如下:

  • 如果參數 expr 是一個類型為 T 的表達式,或者是一個默認類型為 T 的無類型常量表達式,那么 new(expr) 會分配一個類型為 T 的變量,將其初始化為 expr 的值,并返回其地址(類型為 *T)
  • 如果參數是類型 T,那么 new(T) 會分配一個初始化為零值的 T 類型變量(這是原有行為)

簡單來說,就是 new 現在既能接受類型,也能接受值了。

代碼示例

基本類型指針

以前我們得這么寫:

// Go 1.25
n := 42
p1 := &n
fmt.Println(*p1)  // 42

s := "go"
p2 := &s
fmt.Println(*p2)  // go

現在可以直接:

// Go 1.26
p1 := new(42)
fmt.Println(*p1)  // 42

p2 := new("go")
fmt.Println(*p2)  // go

復合類型指針

對于切片這類復合類型也同樣適用:

// Go 1.25
s := []int{11, 12, 13}
p1 := &s
fmt.Println(*p1)  // [11 12 13]

type Person struct{ name string }
p2 := &Person{name: "alice"}
fmt.Println(*p2)  // {alice}

新寫法:

// Go 1.26
p1 := new([]int{11, 12, 13})
fmt.Println(*p1)  // [11 12 13]

type Person struct{ name string }
p2 := new(Person{name: "alice"})
fmt.Println(*p2)  // {alice}

函數返回值指針

這個場景以前特別麻煩:

// Go 1.25
f := func() string { return "go" }
v := f()
p := &v
fmt.Println(*p)  // go

現在一行搞定:

// Go 1.26
f := func() string { return "go" }
p := new(f())
fmt.Println(*p)  // go

需要注意的是,傳入 nil 仍然是不允許的:

p := new(nil)  // 編譯錯誤

實現原理

其實這個特性的實現思路很簡單。當你寫:

p := new(42)

編譯器會將其轉換為類似這樣的操作:

var _tmp = 42
p := &_tmp

或者等價于:

p := new(int)
*p = 42

也就是說,new(expr) 本質上是為非可尋址的表達式顯式分配存儲空間,然后返回其地址。

這樣就統一了創建指針的方式,不管是基本類型還是復合類型,都可以用類似的語法。

社區討論中的另一個方案

其實在 proposal 討論過程中,Rob Pike 還提出了另一個有趣的方案:讓類型轉換變得可尋址。

比如可以這樣寫:

p1 := &int(3)
p2 := &rune(10)
p3 := &string("hello")

這個方案的邏輯是:類型轉換必然會創建新的存儲空間(因為要改變類型),所以讓它可尋址是合理的。

不過最終 Go 團隊選擇了擴展 new 的方案,可能是考慮到:

  1. new 函數的語義本身就是"分配并初始化",擴展它更自然。
  2. 避免引入新的語法歧義。
  3. 保持 & 運算符語義的一致性。

實際應用場景

這個特性雖然看起來簡單,但在實際開發中還是挺有用的。比如:

1. 配置選項

很多第三方庫的配置結構體中會有指針類型的字段,用來區分"未設置"和"設置為零值":

type Config struct {
    Timeout  *int
    MaxRetry *int
}

// Go 1.25
timeout := 30
config := Config{
    Timeout:  &timeout,
    MaxRetry: new(int),  // 只能用 new(int) 表示 0
}

// Go 1.26
config := Config{
    Timeout:  new(30),
    MaxRetry: new(0),
}

2. 測試代碼

在單元測試中構造測試數據時,這個特性能讓代碼更簡潔:

testCases := []struct {
    input    *int
    expected string
}{
    {new(42), "success"},
    {new(0), "zero"},
    {nil, "nil"},
}

3. 內聯指針創建

在函數調用時需要傳指針參數:

// Go 1.25
func process(val *string) {}
s := "data"
process(&s)

// Go 1.26
process(new("data"))

總結

new(expr) 這個特性解決了 Go 中創建基本類型指針時的不便,讓代碼更簡潔一致。雖然改動不大,但確實提升了開發體驗。

這個特性將會在 Go1.26 版本正式發布,由 Alan Donovan、Ian Lance Taylor、Rob Pike 等核心團隊成員推動完成。

對于我們 Go 開發者來說,以后寫代碼可以少定義臨時變量了,代碼也會相對干凈些。

圖片

花了 11 年啊。絕了,真的服了。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2025-12-19 08:50:04

2025-12-08 01:25:00

GoHTTPTransport

2025-12-08 09:06:43

2024-04-28 09:01:06

React 19更新前端

2025-07-21 11:49:44

GoGit子目錄

2025-10-28 01:00:00

GoRecordertrace 格式

2020-07-22 08:58:56

C++特性函數

2025-11-10 08:45:59

2021-09-05 18:25:30

Go命令倉庫

2020-10-14 15:00:38

Python 開發編程語言

2021-12-13 20:09:33

GoElasticsearJava

2021-04-19 11:45:31

Pythonswitch編程語言

2024-01-22 00:30:00

Go編程Go 1.22

2021-04-16 15:02:38

Python 開發編程語言

2025-04-29 08:59:37

2010-07-20 10:19:06

Wine 1.2

2023-11-02 08:43:08

protocgo兼容

2024-08-01 08:47:04

Go計時器工程

2025-06-06 08:13:47

2022-02-11 21:01:18

GoNetip網絡庫
點贊
收藏

51CTO技術棧公眾號

欧美日韩亚洲精品一区二区三区| 国产精品久久久久久久第一福利| 欧美日本中文字幕| 亚洲按摩av| 欧美日本精品| 精品国产视频在线| 免费黄网在线观看| 一本色道综合亚洲| 成人网18免费网站在线| 粉嫩久久99精品久久久久久夜| 亚洲自拍av在线| 精品成人自拍视频| 九九精品在线观看| 欧美xxx视频| 日韩亚洲欧美综合| 国内精品一区视频| 色综合久久中文字幕综合网| 亚洲美女在线免费观看| 国产午夜精品一区二区三区嫩草| 福利视频一区二区三区四区| 国产伦精品一区二区三区视频青涩| 欧美激情第一页在线观看| 午夜国产精品视频免费体验区| 国产精品视频免费在线| av在线不卡顿| 91系列在线观看| 极品日韩av| 欧美午夜精品久久久久免费视| 亚洲国产日本| 国产高清在线精品一区二区三区| 亚洲xxx拳头交| 91亚洲精品丁香在线观看| 欧美精品三区| 久久www免费人成精品| 久久综合图片| 中文字幕日韩精品一区二区| 国产精品自在在线| 日韩免费一级视频| 亚洲欧洲日韩av| 日韩男人天堂| 色天使久久综合网天天| 黄色片免费在线观看| 亚洲娇小xxxx欧美娇小| 日韩在线电影| 国产精品444| 亚洲视屏一区| 国产成人三级视频| 国产精品午夜电影| 美女毛片在线看| 日韩电影网在线| www.爱久久| 国产日韩在线精品av| 国产一区二区你懂的| 米仓穗香在线观看| 欧美激情一区三区| 毛片免费在线| 亚洲性无码av在线| 国产成人3p视频免费观看| 国产一区二区不卡视频| 国产91对白在线观看九色| 污污网站免费观看| 欧美丝袜第三区| 欧美高清影院| 成人黄色激情网| 国产一区二区三区四区在线观看| 色综合天天色综合| 欧美高清www午色夜在线视频| 欧美日韩国产v| 日本在线精品视频| 日韩在线一区二区三区| 男人搞女人网站| 欧美巨大另类极品videosbest | 日韩精品综合在线| 亚洲色图在线看| 在线中文字幕第一页| 久久视频免费在线播放| 欧美阿v一级看视频| 人妻熟妇乱又伦精品视频| 欧美性xxxx在线播放| 成人网ww555视频免费看| 国产成人精品免费视频| 麻豆精品视频在线观看免费| 免费福利片在线观看| 精品国内二区三区| 欧美日韩国产传媒| 国产二区视频在线| 欧美日韩在线三级| 西瓜成人精品人成网站| 久久久无码中文字幕久...| 婷婷综合久久一区二区三区| 人人精品久久| 欧美日韩亚洲在线| 亚洲福利视频一区二区| 99久久婷婷国产综合精品首页| 97人人干人人| 亚洲欧美自拍偷拍| 成人不卡视频| 日韩免费中文专区| 色狠狠综合天天综合综合| 国内精品麻豆美女在线播放视频| 五月天色婷婷综合| 欧美日韩国产一区| 国产欧美日韩在线观看视频| 高清欧美精品xxxxx| 日韩欧美一区二区三区在线| 99久久综合| 3d黄动漫网站| 欧美插天视频在线播放| 国产真实乱对白精彩久久| 黄色网页在线免费看| 91福利视频导航| 夜夜嗨av一区二区三区网页 | 91精品麻豆日日躁夜夜躁| 狠狠做六月爱婷婷综合aⅴ| www国产黄色| 一区二区中文字幕| 精品一区二区在线视频| 成人在线影视| 3d蒂法精品啪啪一区二区免费| 亚洲视频在线一区观看| 亚洲欧美日本国产| 国产美女在线一区| 亚洲欧美日韩精品| 蜜桃精品视频在线观看| 色呦呦在线观看视频| 国产精品视频免费一区二区三区| 一区2区3区在线看| 九色精品91| 免费av片在线观看一道本| 午夜精品久久久久久久99黑人| 久久久国产一区二区三区四区小说 | 久久久亚洲国产精品| 日韩精品高清在线| 久久se精品一区二区| a视频在线观看| 麻豆久久久9性大片| 欧美视频中文字幕| 一区二区亚洲| yellow91字幕网在线| 好看的日韩精品视频在线| 欧美日本一区二区三区四区| 亚洲精品在线二区| 国产在线1区| 日韩偷拍一区二区| 亚洲国模精品一区| 国产成人亚洲综合a∨婷婷| 日韩av免费| 中文字幕第36页| 国产成人综合亚洲| 一本久久a久久免费精品不卡| 欧美日本一区二区高清播放视频| 二区在线观看| 一区二区三视频| 久久精品国产亚洲精品| 国产a国产a国产a| 国产最新免费视频| 精品一区二区三区自拍图片区| 欧美肥婆姓交大片| 精品中文视频在线| 亚洲影视在线播放| 久久综合中文色婷婷| 欧美一级二级三级乱码| 日本午夜精品视频在线观看| 亚洲电影观看| 日韩av资源在线| 成人国产精品免费视频| 69精品人人人人| 国产精品123区| 色爱综合av| 麻豆视频在线播放| av在线播放亚洲| 国产91色在线|| 欧美一级淫片007| 91麻豆文化传媒在线观看| 欧美偷拍自拍| gogo久久| 国模大尺度私拍在线视频| 九九九九久久久久| 精品国产依人香蕉在线精品| 亚洲国产精品久久久久秋霞影院 | 中国在线观看免费国语版电影 | 91精品啪在线观看国产18| av在线播放国产| 亚洲爆乳无码专区| 91超碰rencao97精品| 一区国产精品视频| 香蕉av福利精品导航| 紧缚捆绑精品一区二区| 欧美日韩在线播放视频| 密臀av在线播放| 亚洲欧洲动漫| 蜜臀精品一区二区| 成人免费视频网站入口| 久久视频在线看| 欧美日韩精品免费| 中文字幕日韩精品一区| 日本不卡123| 欧美日韩性在线观看| 91九色综合| 日本在线观看免费|