# Set up your development environment

Get familiar with the Stripe CLI and our server-side SDKs.

Check out our [no-code docs](https://docs.stripe.com/no-code.md), use a [prebuilt solution](https://stripe.com/partners/directory) from our partner directory, or hire a [Stripe-certified expert](https://stripe.com/partners/directory?t=Consulting).

Stripe’s server-side SDKs and command-line interface (CLI) allow you to interact with Stripe’s REST APIs. Start with the Stripe CLI to streamline your development environment and make API calls.

Use the SDKs to avoid writing boilerplate code. To start sending requests from your environment, choose a language to follow a quickstart guide.

> #### Chrome extensions
> 
> We recommend you build your payment integration with Stripe (such as [Elements](https://docs.stripe.com/payments/elements.md) or [Checkout](https://docs.stripe.com/payments/checkout.md)) on your own website. Then, set up your Chrome extension to send users to this payment page when they’re ready to complete a purchase.
> 
> This method is more secure and easier to maintain than trying to handle payments directly within the extension.

# Go


In this quickstart, you install the [Stripe CLI](https://docs.stripe.com/cli.md), a tool that gets you command line access to your Stripe integration. You also install the [Stripe Go server-side SDK](https://github.com/stripe/stripe-go) to get access to Stripe APIs from applications written in Go.

## What you learn

In this quickstart, you’ll learn:

- How to call Stripe APIs without writing a line of code
- How to manage third-party dependencies using Go modules
- How to install the latest Stripe Go SDK v86.4.0
- How to send your first SDK request

## Set up the Stripe CLI

### Install and connect

Install the Stripe CLI with [npm](https://www.npmjs.com/):

```bash
npm install -g @stripe/cli@latest
```

After installation, log in to your Stripe account:

```bash
stripe login
```

After you install the CLI, you can also install [agent tooling](https://docs.stripe.com/cli/agent/setup), or set up [autocompletion](https://docs.stripe.com/cli/completion).

> For more installation options for Windows, macOS, Linux, and Docker, see the [Stripe CLI readme](https://github.com/stripe/stripe-cli#installation) on GitHub.

### Confirm setup

Now that you’ve installed the CLI, you can make a single API request to [Create a product](https://docs.stripe.com/api/products/create.md).

#### bash

```bash
stripe products create \
--name="My First Product" \
--description="Created with the Stripe CLI"
```

Look for the product identifier (in `id`) in the response object. Save it for the next step.

If everything worked, the command-line displays the following response.

#### bash

```json
{
  "id": "prod_LTenIrmp8Q67sa", // The identifier looks like this.
  "object": "product",
  "active": true,
  "attributes": [],
  "created": 1668198126,
  "default_price": null,
  "description": "Created with the Stripe CLI",
  "identifiers": {},
  "images": [],
  "livemode": false,
  "metadata": {},
  "name": "My First Product",
  "package_dimensions": null,
  "price": null,
  "product_class": null,
  "shippable": null,
  "sku": "my-first-product-10",
  "statement_descriptor": null,
  "tax_code": null,
  "type": "service",
  "unit_label": null,
  "updated": 1668198126,
  "url": null
}
```

Next, call [Create a price](https://docs.stripe.com/api/prices/create.md) to attach a price of 30 USD. Swap the placeholder in `product` with your product identifier (for example, `prod_LTenIrmp8Q67sa`).

#### bash

```bash
stripe prices create \
  --unit-amount=3000 \
  --currency=usd \
  --product="{{PRODUCT_ID}}"
```

If everything worked, the command-line displays the following response.

#### bash

```json
{
  "id": "price_1KzlAMJJDeE9fu01WMJJr79o", // The identifier looks like this.
  "object": "price",
  "active": true,
  "billing_scheme": "per_unit",
  "created": 1652636348,
  "currency": "usd",
  "livemode": false,
  "lookup_key": null,
  "metadata": {},
  "nickname": null,
  "product": "prod_Lh9iTGZhb2mcBy",
  "recurring": null,
  "tax_behavior": "unspecified",
  "tiers_mode": null,
  "transform_quantity": null,
  "type": "one_time",
  "unit_amount": 3000,
  "unit_amount_decimal": "3000"
}
```

## Manage third-party dependencies

We recommend managing third-party dependencies using [Go modules](https://go.dev/blog/using-go-modules), which allows you to add new libraries and include them in your Go projects.

### Initialize Go

If you’re starting from scratch in a new directory, you first need to create a `go.mod` file for tracking dependencies. For example:

#### Initialize Go

```bash
go mod init stripe-example
```

## Install the Go server-side SDK

The latest version of the Stripe Go server-side SDK is v86.4.0. It supports Go versions 1.15+.

### Install the library

Install the library with [Go modules](https://go.dev/blog/using-go-modules), a package manager for Go:

```bash
go get github.com/stripe/stripe-go/v86
```

After you install the library with Go modules to a *new* project, the library is automatically added as a dependency in your project’s go.mod file. For example:

```go.mod
module stripe-example

go 1.18

require github.com/stripe/stripe-go/v86 86.4.0 // indirect
```

### Synchronize dependencies

To keep your managed dependency set tidy for an *existing* project, run the following command to [sync your code’s dependencies](https://go.dev/doc/modules/managing-dependencies).

```bash
go mod tidy
```

## Run your first SDK request

Now that you have the Go SDK installed, you can create a subscription [Product](https://docs.stripe.com/api/products/create.md) and attach a [Price](https://docs.stripe.com/api/prices/create.md) with a couple API requests. We’re using the product identifier returned in the response to create the price in this example.

> #### Use best practices for API keys
> 
> This sample uses the default keys of your Stripe user [account](https://docs.stripe.com/get-started/account/set-up.md) for your *sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes) environment. Only you can see these values. Follow [best practices](https://docs.stripe.com/keys-best-practices.md) to manage your keys safely.

#### Create a product and price

```go
package main

import (
  "context"
  "fmt"
  "github.com/stripe/stripe-go/v86"
)

func main() {
  // Don't embed any keys in production code. This is an example.
	// See https://docs.stripe.com/keys-best-practices.
  sc := stripe.NewClient("sk_test_BQokikJOvBiI2HlWgH4olfQ2")

	productParams := &stripe.ProductCreateParams{
		Name:        stripe.String("Starter Subscription"),
		Description: stripe.String("$12/Month subscription"),
	}
	starterProduct, _ := sc.V1Products.Create(context.TODO(), productParams)

	priceParams := &stripe.PriceCreateParams{
		Currency: stripe.String(stripe.CurrencyUSD),
		Product:  stripe.String(starterProduct.ID),
		Recurring: &stripe.PriceCreateRecurringParams{
			Interval: stripe.String(stripe.PriceRecurringIntervalMonth),
		},
		UnitAmount: stripe.Int64(1200),
	}
	starterPrice, _ := sc.V1Prices.Create(context.TODO(), priceParams)

	fmt.Println("Success! Here is your starter subscription product id: " + starterProduct.ID)
	fmt.Println("Success! Here is your starter subscription price id: " + starterPrice.ID)
}
```

Save the file as `create_price.go`. From the command line, `cd` to the directory containing the file you just saved and run:

#### create_price.rb

```bash
go run create_price.go
```

If everything worked, the command line shows the following response. Save these identifiers so you can use them while building your integration.

#### bash

```bash
Success! Here is your starter subscription product id: prod_0KxBDl589O8KAxCG1alJgiA6
Success! Here is your starter subscription price id: price_0KxBDm589O8KAxCGMgG7scjb
```

## See also

This wraps up the quickstart. See the links below for a few different ways to process a payment for the product you just created.

- [Create a payment link](https://docs.stripe.com/payment-links.md)
- [Stripe-hosted page](https://docs.stripe.com/checkout/quickstart.md)
- [Advanced integration](https://docs.stripe.com/payments/quickstart.md)

